package study.dao.user;

import java.util.List;

import study.domain.user.Authority;
import study.domain.user.RoleHierarchy;
import study.domain.user.User;
import study.domain.user.UserSearch;

/**
 * 사용자 매퍼
 *
 * @author Barney Kim
 */
public interface UserMapper {

	/**
	 * 검색과 일치하는 사용자 수를 반환한다.
	 *
	 * @param search 검색
	 */
	int getCount(UserSearch search);

	/**
	 * 검색과 일치하는 사용자 목록을 반환한다.
	 *
	 * @param search 검색
	 */
	List<User> getUsers(UserSearch search);

	/**
	 * 사용자를 반환한다.
	 *
	 * @param search 검색
	 */
	User getUser(User search);

	/**
	 * 사용자를 변경한다.
	 *
	 * @param user 사용자
	 * @return 변경된 개수
	 */
	int setUser(User user);

	/**
	 * 사용자를 추가한다.
	 *
	 * @param user 사용자
	 * @return 추가된 개수
	 */
	int addUser(User user);

	/**
	 * 사용자를 삭제한다.
	 *
	 * @param userId 사용자 ID
	 */
	int removeUser(Long userId);

	// 권한

	/**
	 * 사용자의 권한 목록을 반환한다.
	 *
	 * @param userId 사용자 ID
	 */
	List<Authority> getAuthorities(Long userId);

	List<RoleHierarchy> getRolesHierarchy();
}
